package Copy;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * 递归复制
 * 
 * @author lenovo
 * @date 2020年7月22日
 */
public class IO_19_Copy_03 {

	static String oldFilePath = "D:\\天亮教育\\day_17_07.14";

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file = new File(oldFilePath);

		long startTime = System.currentTimeMillis();
		checkMenu(file);
		long endTime = System.currentTimeMillis();
		System.out.println(endTime - startTime);
	}

	public static void checkMenu(File file) {
		// 如果是文件就终止
		if (file.isFile()) {
			// 文件全路径
			// D:\\天亮教育\\day_17_07.14
			String filePath = file.getAbsolutePath();
			// E:\\天亮教育\\day_17_07.14
			String newFilePath = "E" + filePath.substring(1);
			// E:\\天亮教育\\day_17_07.14 文件对象
			File newFile = new File(newFilePath);

			// 输出流只能创建文件,不会创建目录,所以需要判断目录是否存在

			// getParentFile 上机文件对象
			// E:\\天亮教育\\day_17_07.14 文件对象
			File paraentFile = newFile.getParentFile();

			// 判断该路径是否存在,没有就创建
			if (!paraentFile.exists()) {
				// 创建目录
				paraentFile.mkdirs();
			}

			// 到这里说明肯定有目录了,就进复制操作即可

			try (FileInputStream fis = new FileInputStream(filePath);
					FileOutputStream fos = new FileOutputStream(newFilePath);
					BufferedInputStream bis = new BufferedInputStream(fis);
					BufferedOutputStream bos = new BufferedOutputStream(fos);) {
				byte[] bytes = new byte[102400];
				int tmp = 0;
				while ((tmp = bis.read(bytes)) != -1) {
					bos.write(bytes, 0, tmp);
				}
				bos.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}
			// 字符

//			try (FileReader fis = new FileReader(filePath);
//					FileWriter fos = new FileWriter(newFilePath);
//					BufferedReader bis = new BufferedReader(fis);
//					BufferedWriter bos = new BufferedWriter(fos);) {
//				char[] bytes = new char[102400];
//				int tmp = 0;
//				while ((tmp = bis.read(bytes)) != -1) {
//					bos.write(bytes, 0, tmp);
//				}
//				bos.flush();
//			} catch (Exception e) {
//				e.printStackTrace();
//			}

			// 转换为字符

//			try (FileInputStream fis = new FileInputStream(filePath);
//					FileOutputStream fos = new FileOutputStream(newFilePath);
//					InputStreamReader isr = new InputStreamReader(fis);
//					OutputStreamWriter osw = new OutputStreamWriter(fos);
//					BufferedReader bis = new BufferedReader(isr);
//					BufferedWriter bos = new BufferedWriter(osw);) {
//				char[] bytes = new char[102400];
//				int tmp = 0;
//				while ((tmp = bis.read(bytes)) != -1) {
//					bos.write(bytes, 0, tmp);
//				}
//				bos.flush();
//			} catch (Exception e) {
//				e.printStackTrace();
//			}

			return;
		}
		// 能到这里,说明是目录
		File[] files = file.listFiles();
		for (File subFile : files) {
			checkMenu(subFile);
		}
	}
}
